<?php

//######################
//  File name:common.php
//  Create time:2014-3-10
//  Author:Graent.hu
//  Encode:UTF-8
//  Lanage:PHP
//######################
/**
 * 友好的时间显示
 *
 * @param int    $sTime 待显示的时间
 * @param string $type  类型. normal | mohu | full | ymd | other
 * @param string $alt   已失效
 * @return string
 */
function friendlyDate($sTime, $type = 'ymd', $alt = 'false') {
    //sTime=源时间，cTime=当前时间，dTime=时间差
    $cTime = time();
    $dTime = $cTime - $sTime;
    $dDay = intval(date("z", $cTime)) - intval(date("z", $sTime));
    //$dDay        =    intval($dTime/3600/24);
    $dYear = intval(date("Y", $cTime)) - intval(date("Y", $sTime));
    //normal：n秒前，n分钟前，n小时前，日期
    if ($type == 'normal') {
        if ($dTime < 60) {
            return $dTime . "秒前";
        } elseif ($dTime < 3600) {
            return intval($dTime / 60) . "分钟前";
            //今天的数据.年份相同.日期相同.
        } elseif ($dYear == 0 && $dDay == 0) {
            //return intval($dTime/3600)."小时前";
            return '今天' . date('H:i', $sTime);
        } elseif ($dYear == 0) {
            return date("m月d日 H:i", $sTime);
        } else {
            return date("Y-m-d H:i", $sTime);
        }
    } elseif ($type == 'mohu') {
        if ($dTime < 60) {
            return $dTime . "秒前";
        } elseif ($dTime < 3600) {
            return intval($dTime / 60) . "分钟前";
        } elseif ($dTime >= 3600 && $dDay == 0) {
            return intval($dTime / 3600) . "小时前";
        } elseif ($dDay > 0 && $dDay <= 7) {
            return intval($dDay) . "天前";
        } elseif ($dDay > 7 && $dDay <= 30) {
            return intval($dDay / 7) . '周前';
        } elseif ($dDay > 30) {
            return intval($dDay / 30) . '个月前';
        }
        //full: Y-m-d , H:i:s
    } elseif ($type == 'full') {
        return date("Y-m-d  H:i:s", $sTime);
    } elseif ($type == 'ymd') {
        return date("Y-m-d", $sTime);
    } else {
        if ($dTime < 60) {
            return $dTime . "秒前";
        } elseif ($dTime < 3600) {
            return intval($dTime / 60) . "分钟前";
        } elseif ($dTime >= 3600 && $dDay == 0) {
            return intval($dTime / 3600) . "小时前";
        } elseif ($dYear == 0) {
            return date("Y-m-d H:i:s", $sTime);
        } else {
            return date("Y-m-d H:i:s", $sTime);
        }
    }
}

// 数组保存到文件
function arr2file($filename, $arr = '') {
    if (is_array($arr)) {
        $con = var_export($arr, true);
    } else {
        $con = $arr;
    }
    $con = "<?php\nreturn $con;\n?>"; //\n!defined('IN_MP') && die();\nreturn $con;\n
    write_file($filename, $con);
}

function mkdirss($dirs, $mode = 0777) {
    if (!is_dir($dirs)) {
        mkdirss(dirname($dirs), $mode);
        return @mkdir($dirs, $mode);
    }
    return true;
}

function write_file($l1, $l2 = '') {
    $dir = dirname($l1);
    if (!is_dir($dir)) {
        mkdirss($dir);
    }
    return @file_put_contents($l1, $l2);
}

function read_file($l1) {
    return @file_get_contents($l1);
}

/**
 * 提取内容首图作为缩略图
 */
function bodyimg($obj) {
    if (isset($obj)) {
        if (preg_match("<img.*src=[\"](.*?)[\"].*?>", $obj, $regs)) { //使用正则获取第一幅图像地址
            return $regs[1];
        } else {
            return "";
        }
    }
}

/**
 * 解决半字截取
 */
function utf_substr($str, $len) {
    $str = str_replace('&nbsp;', '', trim(strip_tags($str)));
    for ($i = 0; $i < $len; $i++) {
        $temp_str = substr($str, 0, 1);
        if (ord($temp_str) > 127) {
            $i++;
            if ($i < $len) {
                $new_str[] = substr($str, 0, 3);
                $str = substr($str, 3);
            }
        } else {
            $new_str[] = substr($str, 0, 1);
            $str = substr($str, 1);
        }
    }
    //$tmpstr = str_replace('&nbsp;', '', trim(strip_tags(join($new_str))));
    return join($new_str);
}

/**
 * 计算中英混合字符串的长度
 */
function utf8_strlen($string = null) {
    // 将字符串分解为单元
    preg_match_all("/./us", $string, $match);
    // 返回单元个数
    return count($match[0]);
}

/**
 * 操作记录
 */
function oplog($op = '', $operator = '-----', $status = '0') {
    $LOG = M('Log');
    $data = array(
        'ip' => get_client_ip(),
        'op' => $op,
        'operator' => $operator,
        'status' => $status,
        'time' => time(),
    );
    @$LOG->add($data);
}

/**
 * 获取对应IP的地址
 * @param string    $ip    需要获取位置的IP地址串
 * @param int       $type  返回数据的类型0是默认，1返回位置和ip，其他返回数组
 */
function get_location($ip = '0.0.0.0', $type = 0) {
    $IpModel = new Org\Net\IpLocation('UTFWry.dat');

    $arr = $IpModel->getlocation($ip);
    switch ($type) {
        case 0://返回国家 城市
            return $arr['country'] . " " . $arr['area'];
            break;
        case 1://返回国家 城市 当前IP
            return $arr['country'] . " " . $arr['area'] . " " . $arr['ip'];
            break;
        default://默认返回数组
            return $arr;
    }
}

/**
 * 邮件发送函数
 */
function sendMail($to, $subject, $content) {
    vendor('PHPMailer.PHPMailerAutoload');
    $mail = new PHPMailer();
    // 装配邮件服务器
    if (C('MAIL_SMTP')) {
        $mail->IsSMTP();
    }
    $mail->Host = C('MAIL_HOST');
    $mail->SMTPAuth = C('MAIL_SMTPAUTH');
    $mail->Username = C('MAIL_USERNAME');
    $mail->Password = C('MAIL_PASSWORD');
    //$mail->SMTPSecure = C('MAIL_SECURE');
    $mail->CharSet = C('MAIL_CHARSET');
    // 装配邮件头信息
    $mail->From = C('MAIL_USERNAME');
    $mail->AddAddress($to);
    $mail->FromName = C('WEBSET.sitename');
    $mail->IsHTML(C('MAIL_ISHTML'));
    // 装配邮件正文信息
    $mail->Subject = $subject;
    $mail->Body = $content;
    // 发送邮件
    if (!$mail->Send()) {
        return FALSE;
    } else {
        return TRUE;
    }
}